package com.fy.fyspace.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fy.fyspace.common.result.Result;
import com.fy.fyspace.model.dto.picture.*;
import com.fy.fyspace.model.entity.Picture;
import com.fy.fyspace.model.vo.user.UserSessionVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;

/**
 * 图片服务接口
 */
public interface PictureService extends IService<Picture> {

    /**
     * 获取图片列表
     *
     * @param category
     * @param tags
     * @param searchText
     * @param page
     * @param pageSize
     * @param httpSession
     * @return
     */
    Result getPictureList(String category, String tags, String type, String searchText, Integer page,
                          Integer pageSize,
                          HttpSession httpSession);

    /**
     * 上传图片
     * 支持单张或多张图片上传
     *
     * @param files       图片文件数组
     * @param namePrefix  文件名前缀
     * @param tags        标签字符串，以逗号分隔
     * @param category    分类
     * @param description 描述
     * @param isPublic    是否公开
     * @param httpSession 会话信息
     * @return 处理结果
     */
    Result uploadImages(MultipartFile[] files,
                        String namePrefix,
                        String tags,
                        String category,
                        String description,
                        Integer isPublic,
                        HttpSession httpSession);

    /**
     * 获取图片统计数据
     */
    Result getStatistics();

    /**
     * 批量审核通过图片
     */
    Result batchApprovePictures(PictureBatchApproveDTO request);

    /**
     * 审核通过单张图片
     */
    Result approvePicture(Long pictureId);

    /**
     * 拒绝单张图片
     */
    Result rejectPicture(Long pictureId, PictureRejectDTO request);

    /**
     * 批量拒绝图片
     */
    Result batchRejectPictures(PictureBatchRejectDTO request);

    /**
     * 获取图片详情
     */
    Result getPictureDetail(Long pictureId);

    /**
     * 更新图片信息
     */
    Result updatePicture(Long pictureId, PictureUpdateDTO request);

    /**
     * 删除单张图片
     */
    Result deletePicture(Long pictureId);

    /**
     * 批量删除图片
     */
    Result batchDeletePictures(PictureBatchDeleteDTO request);

    /**
     * 根据颜色搜索图片
     *
     * @param color
     * @return
     */
    Result searchByColor(String color);

    @Transactional(rollbackFor = Exception.class)
    Result editPicture(Long pictureId, MultipartFile file, String tags,
                       String category, String description, HttpSession httpSession);

    /**
     * 获取待审核的图片列表
     */
    Result getUploadingPictures(Integer page, Integer pageSize, String description, Integer reviewStatus,String category, String tags);

    /**
     * 批量获取图片链接
     * @param pictureUploadByBatchRequest
     * @param userSessionVO
     * @return
     */
    public Result getBingImageUrls(PictureUploadByBatchDTO pictureUploadByBatchRequest, UserSessionVO userSessionVO);

}
